package demo1;

//演示synchronized关键字的可重入的特性
public class Test {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            //使用当前线程类作为锁对象，不对对同一把锁重复加锁，来验证可重入的性质（对于一个线程，已经获取了锁，锁对象中记录了当前的
            // 线程信息，在锁住的代码中想再次获取这把锁，仍然可以获取到，对于这种现象，就称为可重入）
            synchronized (Thread.currentThread()) {
                System.out.println("锁对象为" + Thread.currentThread());
                synchronized (Thread.currentThread()) {
                    System.out.println("锁对象为" + Thread.currentThread());
                    synchronized (Thread.currentThread()) {
                        System.out.println("锁对象为" + Thread.currentThread());
                        synchronized (Thread.currentThread()) {
                            System.out.println("锁对象为" + Thread.currentThread());
                        }
                    }
                }
            }
            //重复对一把锁加了四次，启动线程看一下是否可以重复获取锁
        });
        //启动线程
        t1.start();
        //打印结果即可说明synchronized的可重入特性
    }
}
